const app = getApp() // 获取应用实例
import { getOpenid, postPayInfo } from '../../utils/http/api'// 导入http api

// 支付流程:微信登录获取code，根据code获取openid，根据openid/户号/金额等信息获取微信支付信息，调起微信支付，接收支付回调。
export function openWxPay(type, amount_total, number, ids) {
  wx.showLoading({ title: '获取支付信息', mask: true, })
  // 微信登录获取code
  wx.login({
    async success(res) {
      // console.log('小程序登录成功。。。res.code = ',res.code)
      if (res.code) {
        // 根据登录code 换取openid
        let { code, msg, data } = await getOpenid({ code: res.code, })
        // console.log(`getOpenid...code=${code},msg=${msg},data=`, data)
        if (code == '1' && data.openid) {
          // 根据openid获取支付信息
          // 建行支付
          // reqPayInfo(data.openid, type, amount_total, number, ids)
          // 微信支付
          reqWXPayInfo(data.openid, type, amount_total, number, ids)
        } else {
          wx.showToast({ title: msg, icon: 'error' })
        }
      } else {
        wx.hideLoading()
        wx.showToast({ title: '微信code错误', icon: 'error', })
        console.log('微信code错误...', res.errMsg)
      }
    },

    fail(res) {
      wx.hideLoading()
      wx.showToast({ title: '微信code获取失败', icon: 'error', })
      console.log('微信code获取失败...', res)
    },
  })
}

// 请求建行(微信)支付信息
export async function reqPayInfo(SUB_OPENID, type, amount_total, number, ids) {
  wx.showLoading({ title: '获取支付信息', mask: true, })
  // 必传参数: SUB_OPENID:小程序openid
  // 物业类型: type:0 物业 1 水 2 电
  // ids:账单id,用英文逗号拼接  
  // 充值金额: amount_total
  // number:户号
  let { code, msg, data } = await postPayInfo({
    token: app.gl.token, SUB_OPENID, type, amount_total, number, ids
  })
  // console.log(`reqPayInfo...code=${code},msg=${msg},data=`, data)
  if (code == '1' && data.ERRCODE == '000000') {
    wx.showLoading({ title: '等待支付结果..', mask: true, })
    // 调起微信支付
    wx.requestPayment({
      timeStamp: data.timeStamp,
      nonceStr: data.nonceStr,
      package: data.package,
      signType: data.signType,
      paySign: data.paySign,
      // 用户支付成功
      success(res) {
        let msg = '支付成功！'
        if (type == 2) {
          msg = '支付成功！请于4小时后查看剩余电量'
        }
        wx.hideLoading()
        wx.showModal({
          title: '提示', content: msg, showCancel: false,
          success(res) {
            if (res.confirm) { // 点击确定
              wx.navigateBack() // 关闭当前页面
            }
          }
        })
      },

      fail(res) {
        wx.hideLoading()
        wx.showToast({ title: '支付失败', icon: 'none', })
      }
    })
  } else {
    wx.hideLoading()
    wx.showToast({ title: msg, icon: 'none' })
  }
}

// 请求微信支付信息
export async function reqWXPayInfo(openid, type, amount_total, number, ids) {
  wx.showLoading({ title: '获取支付信息', mask: true, })
  // 必传参数: openid:小程序openid
  // 物业类型: type:0 物业 1 水 2 电
  // ids:账单id,用英文逗号拼接  
  // 充值金额: amount_total
  // number:户号
  let { code, msg, data } = await postPayInfo({
    token: app.gl.token, openid, type, amount_total, number, ids, payment_type:'wxpay'
  })
  // console.log(`reqPayInfo...code=${code},msg=${msg},data=`, data)
  if (code == '1') {
    wx.showLoading({ title: '等待支付结果..', mask: true, })
    // 调起微信支付
    wx.requestPayment({
      timeStamp: data.timeStamp,
      nonceStr: data.nonceStr,
      package: data.package,
      signType: data.signType,
      paySign: data.paySign,
      // 用户支付成功
      success(res) {
        let msg = '支付成功！'
        if (type == 2) {
          msg = '支付成功！请于4小时后查看剩余电量'
        }
        wx.hideLoading()
        wx.showModal({
          title: '提示', content: msg, showCancel: false,
          success(res) {
            if (res.confirm) { // 点击确定
              wx.navigateBack() // 关闭当前页面
            }
          }
        })
      },

      fail(res) {
        wx.hideLoading()
        wx.showToast({ title: '支付失败', icon: 'none', })
      }
    })
  } else {
    wx.hideLoading()
    wx.showToast({ title: msg, icon: 'none' })
  }
}